package br.com.jk.valealim.cartao;

import java.io.Serializable;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import br.com.jk.valealim.cartaotipo.CartaoTipo;
import javax.persistence.SequenceGenerator;
import javax.persistence.UniqueConstraint;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Index;

/**
 *
 * @author camilo
 */
@Entity
@Table(name = CartaoDao.NAME_TABLE, schema = CartaoDao.NAME_SCHEMA, uniqueConstraints = {
  @UniqueConstraint(name = "uk_cartao_tipo", columnNames = {"id_cartao_tipo", "cartao_numero"})})
public class Cartao implements Serializable {

  @Id
  @SequenceGenerator(name = CartaoDao.NAME_SEQUENCE, sequenceName = CartaoDao.NAME_SEQUENCE, schema = CartaoDao.NAME_SCHEMA)
  @GeneratedValue(strategy = GenerationType.AUTO, generator = CartaoDao.NAME_SEQUENCE)
  @Column(name = "id")
  private Integer id;
  @ManyToOne
  @JoinColumn(name = "id_cartao_tipo", nullable = false)
  @ForeignKey(name = CartaoDao.NAME_FK_CARTAO_TIPO)
  private CartaoTipo cartaoTipo;
  @Index(name = "in_nome_cliente")
  @Column(name = "nome_cliente", nullable = false)
  private String nomeCliente;
  @Index(name = "in_cartao_numero")
  @Column(name = "cartao_numero", nullable = false)
  private String cartaoNumero;
  @Column(name = "cartao_cod_verif")
  private int cartaoCodVerif;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public CartaoTipo getCartaoTipo() {
    return cartaoTipo;
  }

  public void setCartaoTipo(CartaoTipo cartaoTipo) {
    this.cartaoTipo = cartaoTipo;
  }

  public String getNomeCliente() {
    return nomeCliente;
  }

  public void setNomeCliente(String nomeCliente) {
    this.nomeCliente = nomeCliente;
  }

  public String getCartaoNumero() {
    return cartaoNumero;
  }

  public void setCartaoNumero(String cartaoNumero) {
    this.cartaoNumero = cartaoNumero;
  }

  public int getCartaoCodVerif() {
    return cartaoCodVerif;
  }

  public void setCartaoCodVerif(int cartaoCodVerif) {
    this.cartaoCodVerif = cartaoCodVerif;
  }

  @Override
  public int hashCode() {
    int hash = 7;
    hash = 17 * hash + Objects.hashCode(this.id);
    hash = 17 * hash + Objects.hashCode(this.cartaoTipo);
    hash = 17 * hash + Objects.hashCode(this.nomeCliente);
    hash = 17 * hash + Objects.hashCode(this.cartaoNumero);
    hash = 17 * hash + this.cartaoCodVerif;
    return hash;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final Cartao other = (Cartao) obj;
    if (!Objects.equals(this.id, other.id)) {
      return false;
    }
    if (!Objects.equals(this.cartaoTipo, other.cartaoTipo)) {
      return false;
    }
    if (!Objects.equals(this.nomeCliente, other.nomeCliente)) {
      return false;
    }
    if (!Objects.equals(this.cartaoNumero, other.cartaoNumero)) {
      return false;
    }
    if (this.cartaoCodVerif != other.cartaoCodVerif) {
      return false;
    }
    return true;
  }
}
